package com.dyj.tiktok.domain.vo;

import com.alibaba.fastjson.annotation.JSONField;
import com.dyj.tiktok.enums.PostModeEnum;
import com.dyj.tiktok.enums.PrivacyLevelEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serial;
import java.io.Serializable;
import java.util.List;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class UploadImageReqVo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 必填
     * 媒体类型:目前仅PHOTO允许
     */
    @JSONField(name = "media_type")
    private String mediaType = "PHOTO";

    /**
     * 必填
     * 发布模式:
     * DIRECT POST: 直接将内容发布到TikTok用户的帐户
     * MEDIA_UPLOAD: 将内容上传至TikTok，用户可使用TikTok的编辑流程完成帖子。用户将收到收件箱通知。
     * 枚举 {@link PostModeEnum}
     */
    @JSONField(name = "post_mode")
    private String postMode;

    /**
     * 必填
     * 发布信息
     */
    @JSONField(name = "post_info")
    private PostInfo postInfo;

    /**
     * 必填
     * 图片信息
     */
    @JSONField(name = "source_info")
    private SourceInfo sourceInfo;

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @Accessors(chain = true)
    public static class PostInfo implements Serializable {
        @Serial
        private static final long serialVersionUID = 1L;

        /**
         * 标题
         */
        private String title;

        /**
         * 描述
         */
        private String description;

        /**
         * 发布模式（postMode）为: DIRECT POST(必填)
         * 隐私等级:
         * PUBLIC_TO_EVERYONE: 向所有人公开
         * MUTUAL_FOLLOW_FRIENDS: 互相关注的人
         * FOLLOWER_OF_CREATOR: 粉丝
         * SELF_ONLY: 仅自己可见
         * 与查询创作者信息接口返回的privacy_level_options的值之一比配
         * 枚举 {@link PrivacyLevelEnum}
         */
        @JSONField(name = "privacy_level")
        private String privacyLevel;

        /**
         * 仅适用于 发布模式（postMode）为: DIRECT POST
         * 是否禁用评论
         */
        @JSONField(name = "disable_comment")
        private Boolean disableComment;

        /**
         * 仅适用于 发布模式（postMode）为: DIRECT POST
         * 是否自动添加音乐
         * 如果设置为true，推荐的音乐将自动添加到照片中，并且如果用户喜欢其他音乐，他们可以稍后选择在 TikTok 中更改帖子的音乐。
         */
        @JSONField(name = "auto_add_music")
        private Boolean autoAddMusic;

        /**
         * 仅适用于 发布模式（postMode）为: DIRECT POST
         * 如果内容是付费合作以推广第三方业务，则设置为 true
         */
        @JSONField(name = "brand_content_toggle")
        private Boolean brandContentToggle;

        /**
         * 仅适用于 发布模式（postMode）为: DIRECT POST
         * 如果此内容是为了宣传创作者自己的业务，则设置为true
         */
        @JSONField(name = "brand_organic_toggle")
        private Boolean brandOrganicToggle;
    }

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @Accessors(chain = true)
    public static class SourceInfo implements Serializable {
        @Serial
        private static final long serialVersionUID = 1L;

        /**
         * 必填
         * 来源:仅 PULL_FROM_URL 允许
         */
        @JSONField(name = "source")
        private String source = "PULL_FROM_URL";

        /**
         * 照片图像url集合
         * 最多包含 35 个照片内容 URL 的数组。这些 URL 必须可公开访问，并经过您的应用验证。
         */
        @JSONField(name = "photo_images")
        private List<String> photoImages;

        /**
         * 照片封面索引
         * 表示用作封面的照片的索引（从0开始）
         * 如果是0，则取 photoImages 中的第一张图片为封面
         */
        @JSONField(name = "photo_cover_index")
        private Integer photoCoverIndex;
    }
}
